package com.cheifsteam.springframework.aop;


import org.aopalliance.aop.Advice;

import java.lang.reflect.Method;

/**
 * 前置通知(Before Advice)接口，定义在目标方法执行前实施增强的逻辑
 *
 * @author qrx
 * @date 2025/8/6
 * @description: AOP前置通知接口，用于在连接点(JoinPoint)前执行自定义行为
 *
 * 继承自Advice标记接口，表示这是一种特定类型的增强(Advice)
 */
public interface BeforeAdvice extends Advice {

    /**
     * 在目标方法执行前触发的回调方法
     *
     * @param method 被调用的目标方法对象（反射Method对象）
     * @param args 方法调用参数数组
     * @param target 目标对象实例（被代理的原始对象）
     * @throws Throwable 允许抛出任何异常，异常会中断后续执行
     *
     * 典型应用场景：
     * - 权限检查
     * - 参数校验
     * - 日志记录
     * - 事务开始标记
     *
     * 实现示例：
     * public void before(Method method, Object[] args, Object target) {
     *     System.out.println("准备执行方法: " + method.getName());
     *     if(args != null) {
     *         System.out.println("参数列表: " + Arrays.toString(args));
     *     }
     * }
     */
    void before(Method method, Object[] args, Object target) throws Throwable;
}